package com.wad.manager.utils;

import com.wad.entity.system.SysMenu;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * @author wad
 * @date 2023/12/04 10:06
 * @project e-commerce
 **/

//封装树形菜单的数据
public class MenuHelper {


    //通过递归的方式实现封装的过程
    public static List<SysMenu> buildTree(List<SysMenu> menus){
        List<SysMenu> treeList=new ArrayList<>();
        for (SysMenu menu : menus) {
            //找到递归操作的入口
            //条件parent_id=0
            if (menu.getParentId()==0){

                //根据第一层，找下层数据，使用递归完成
                //写一个方法实现找下层的过程，方法里面传递两个参数：第一个参数：当前第一层的菜单，第二个参数：所有菜单的集合
                treeList.add(findChildren(menu,menus));
            }
        }
        return treeList;
    }

    //递归查找下层的数据
    private static SysMenu findChildren(SysMenu menu, List<SysMenu> menus) {
        //在SysMenu中有个属性 private List<SysMenu> children;封装下一层数据
        menu.setChildren(new ArrayList<>());
        //递归查询
        //menu中的id值和集合中的parentId值相同那么就是下层数据
        for (SysMenu sysMenu : menus) {
            //判断id和parentId值是否相同
            if (Objects.equals(sysMenu.getParentId(),menu.getId())){
                //则进行封装
                menu.getChildren().add(findChildren(sysMenu,menus));
            }
        }
        return menu;
    }


}
